www.gusucode.com > XbPhp开发框架 v1.4.5PHP源码程序 > XbPhp开发框架 v1.4.5/xbphp/xbphp/XbPhp/controller/Controller.php
<?php /** * 控制器 * @author wave */ class Controller { //引入模型的数组 public $uses = array(); //加载组件数组 public $component = array(); //视图类 public $view = ''; public function __construct() { //加载组件或模型 $this->AtuoLoads(); //视图 $this->views(); //过滤post数据 $this->ParameterFilter($_POST); //获取请求 $this->request(); //自动初始化回调函数 $this->_initialize(); } /** * 设置键值 * @param string $key 键 * @param string $value 值 */ public function __set($key,$value) { switch ($key) { case 'data': $this->request->{$key} = $value; break; default: $this->{$key} = $value; break; } } /** * 毁消变量 * @param string $key 键 * @author wave */ public function __unset($key) { if(isset($this->request->{$key})) { unset($this->request->{$key}); }else { unset($this->{$key}); } } /** * 判断请求是post get ajax * @param string $val 请求的方式值只能写post get ajax * @return boolean * @author wave */ public function is($val) { switch ($val) { case 'ajax': return (strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') ? true : flase; break; default: return (strtolower($_SERVER['REQUEST_METHOD']) === $val) ? true : false; break; } } /** * 加载文件并初始化 * @param null $name 文件名 * @param null $path 路徑 * @author wave */ public function load($name = null, $path = null) { if(load($name,$path)) { $this->$name = Xbphp::run_cache($name); } } /** * 加载模型 * @param null $model 模型 * @param null $prefix 字段前缀 * @author wave */ public function loadModel($model = null,$prefix = null,$connect = null) { static $model_arr = array(); $path = APP_PATH.DS.ROOT_MODEL.DS; if(!empty($model) && !in_array($model,$model_arr)) { $model_arr[$model] = $model.'Model.php'; } if(isset($model_arr[$model]) && load($model_arr[$model],$path)) { $obj_name = rtrim($model_arr[$model],'.php'); //改变$this->uses引入模型的名字 $model = $this->change_model($model, $model_tem); if(!isset(Xbphp::$init[$obj_name])) { Xbphp::$init[$obj_name] = new $obj_name($model,$prefix,$connect,$model_tem); } $model = str_replace('Model', '', get_class(Xbphp::$init[$obj_name])); $model = isset($model_tem) ? $model_tem : $obj_name; $this->$model = Xbphp::$init[$obj_name]; }else { $model = $this->change_model($model, $model_tem); if(!isset(Xbphp::$init[$model])) { Xbphp::$init[$model] = new Model($model,$prefix,$connect,$model_tem); } $model_name = isset($model_tem) ? $model_tem : $model; $this->$model_name = Xbphp::$init[$model]; } } /** * 获取跨控制器获取数据 * @param string $url 请求串 * @return data */ public function requestAction($url = '') { $option = array(); if(empty($url)) return false; $urlArr = array_values(array_filter(explode('/',$url))); if(!load($urlArr[0].'Controller.php',APP_PATH.DS.ROOT_CONTROLLER.DS)) return false; if(!class_exists($urlArr[0].'Controller')) return false; $obj = Xbphp::run_cache($urlArr[0].'Controller'); if(!method_exists($obj, $urlArr[1])) return false; $option = str_replace(array($urlArr[0],$urlArr[1]),'', $urlArr); $option = array_values(array_filter($option)); return call_user_func_array(array($obj,$urlArr[1]),$option); } /** * 改变$this->uses引入的模型,在字符大写加下划线并转换小写 * @param string $model 要改变的模型名字 * @param string &$model_tem 保存原来的模型名字的地址 * @return string * @author wave */ protected function change_model($model, &$model_tem) { return change_model($model, $model_tem); } /** * 获取请求方法控制器名字与方法 * @author wave */ protected function request() { //获取默认的数组 $this->request->data =& $_POST; //获取默认的方法名字 $this->request->action = A_INDEX; //获取默认的控制器名字 $this->request->controller = M_INDEX; $this->params = Xbphp::getServerUrl(); //获取URL的访问的控制器 if(isset($this->params['0'])) { $this->request->controller = $this->params['0']; } //获取URL的访问的方法 if(isset($this->params['1'])) { $this->request->action = $this->params['1']; } } /** * 加载组件 * @author wave */ protected function Components($object) { static $arr = array(); if(!in_array($object,$arr)) { $arr[$object] = $object.'Component.php'; if(load($arr[$object],ROOT_PATH.DS.COMP)) { $object_name = rtrim($arr[$object],'.php'); $this->{$object} = Xbphp::run_cache($object_name); } } } /** * 初始化视图类 * @return Object * @author wave */ private function views() { if(class_exists('view')) { $this->view = Xbphp::run_cache('view'); } } /** * 自动加载模型或组件 * @author wave */ protected function AtuoLoads() { //加载redis if(class_exists('config') && isset(config::$redisStatus) && !empty(config::$redisStatus)) { $this->redis = XredisCache::init(); } if(!empty($this->uses)) { foreach($this->uses as $val) { $this->loadModel($val); } } if(!empty($this->component)) { foreach($this->component as $value) { $this->Components($value); } } } /** * 对参数过滤把特殊字符转换实体 * @param Array $send 要过滤的数据 * @param string $callback 回調函數 * @author wave */ public function ParameterFilter(&$send) { if(!is_array($send) || empty($send)) { return ; } $htmlTranslationTableArr = get_html_translation_table(HTML_SPECIALCHARS,ENT_NOQUOTES,"UTF-8"); $htmlTranslationTableArrVal =array_values($htmlTranslationTableArr); $htmlTranslationTableArrKey = array_keys($htmlTranslationTableArr); $send = json_encode($send); $send = str_replace($htmlTranslationTableArrKey, $htmlTranslationTableArrVal,$send); $send = json_decode($send,true); } protected function _initialize() {} }